
import fs from "fs/promises";
import { pathToFileURL } from "url";
import { createRequire } from "module";

/**
 * @description 安全导入ES模块文件
 * @param {string} filepath - 文件路径
 * @returns {Promise<object|null>} 模块对象或null
 */
const importFile = async (filepath) => {
  if (!filepath || typeof filepath !== 'string') {
    console.error('错误: 文件路径必须是有效的字符串');
    return null;
  }

  try {
    await fs.access(filepath);
    const fileUrl = pathToFileURL(filepath).href;
    const module = await import(fileUrl);
    return module.default || module;
  } catch (error) {
    if (error.code === 'ENOENT') {
      console.error(`文件不存在: ${filepath}`);
    } else if (error.code === 'EACCES') {
      console.error(`没有权限访问文件: ${filepath}`);
    } else {
      console.error(`导入文件时出错 [${filepath}]:`, error.message);
    }
    return null;
  }
};

/**
 * @description: 兼容低版本 Node 的 CommonJS 模块加载
 */
export const importjs = createRequire(import.meta.url);

global.requirejs = importjs;
global.importFile = importFile;